/*!
 * egpusers-async-control-inc.js
 * 
 *  tetsuya_odaka (EzoGP)
 * 
 * (C) 2009, EzoGP.
 * $Id: syracava-1.0-min.js 455 2009-04-08 08:54:14Z tetsuya_odaka $
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var EzTable = function() {

	var Dom = YAHOO.util.Dom;
	var Event = YAHOO.util.Event;
	var Connect = YAHOO.util.Connect;
	
	/*****************************************************
	* 新規登録画面の生成
	*****************************************************/
    this.createEntrySubWindow = function(_evt) {
    	
    	// MyAsyncModalSubWindowオブジェクトのコンフィグとインスタンス化
    	var config ={
    		'renderDiv'	:	'egp-my-window',
    		'dataArray'	:	null,
    		'formURL'	:	'./forms/egpusersEntry.txt',
    		'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	true
    	}
    	var subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
    	subWindow.createScreen = function(obj){
   			/*---------------------------------------*/
    		// Exit Processの定義
    		var exitProc = '';

    		// 登録（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
			var config = {
				'submitType': 'Async',
				'submitURL'	: 'egpusersEntryAsync.php',
				'submitForm': 'form1',
				'exitProc'	: exitProc,
				'upload'	: false
			}

			YAHOO.util.Event.on('egp-my-entry-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}
	
	/*****************************************************
	* アップロード画面の生成
	*****************************************************/
    this.createUploadSubWindow = function(_evt) {
    	
    	// MyAsyncModalSubWindowオブジェクトのコンフィグとインスタンス化
    	var config ={
    		'renderDiv'	:	'egp-my-window',
    		'dataArray'	:	null,
    		'formURL'	:	'./forms/egpusersUpload.txt',
    		'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	true
    	}
    	var subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
    	subWindow.createScreen = function(obj){
   			/*---------------------------------------*/
    		// Exit Processの定義
    		var exitProc = '';

    		// 登録（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
			var config = {
				'submitType': 'Async',
				'submitURL'	: 'egpusersUploadAsync.php',
				'submitForm': 'form1',
				'exitProc'	: exitProc,
				'upload'	: true
			}

			YAHOO.util.Event.on('egp-my-entry-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}

	/*****************************************************
	* 詳細画面の生成
	*****************************************************/
    var createDetailSubWindow = function(rowData) {
    	var subWindow,config;
    	
   		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersDetail.txt',
   			'validateURL':	'not needed',
   			'modal'		:	false,
			'upload'	: false
   		};
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){
   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('email').innerHTML = dArr['email'];
			Dom.get('name').innerHTML = dArr['name'];
			Dom.get('nameyomi').innerHTML = dArr['nameyomi'];
			Dom.get('password').innerHTML = dArr['password'];
			Dom.get('role').innerHTML = dArr['role'];
   			/*---------------------------------------*/
			return;	
		}
    	// サブウィンドウの表示
		subWindow.openHdlr();
    }
    
	/*****************************************************
	* 削除画面の生成
	*****************************************************/
    var createDeleteSubWindow = function(rowData) {
    	var subWindow,config;
    	
		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersDelete.txt',
   			'validateURL':	'not needed',
   			'modal'		:	false,
			'upload'	: 	false
   		}
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){
   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('id').value 			= dArr['id']
			Dom.get('email').innerHTML 		= dArr['email']
			Dom.get('name').innerHTML 		= dArr['name']
			Dom.get('nameyomi').innerHTML 	= dArr['nameyomi']
			Dom.get('password').innerHTML 	= dArr['password']
			Dom.get('role').innerHTML 		= dArr['role']

			// 削除（submit）ボタンにハンドラーを仕込む
			var submitObj = new MySubmit();
	    	// Exit Processの定義
   			var exitProc = '';
			var config = {
				submitType	: 'Async',
				submitURL	: 'egpusersDeleteAsync.php',
				submitForm	: 'form1',
				exitProc	: exitProc
			}
			YAHOO.util.Event.on('egp-my-delete-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}

	/*****************************************************
	* 更新画面の生成
	*****************************************************/
    var createUpdateSubWindow = function(rowData) {
    	var subWindow,config;
    	
		// MyAsyncSubWindowオブジェクトのコンフィグとインスタンス化
	   	config ={
   			'renderDiv'	:	'egp-my-window',
   			'dataArray'	:	rowData,
   			'formURL'	:	'./forms/egpusersUpdate.txt',
   			'validateURL':	'../Myznala/myAsyncValidate.php',
   			'modal'		:	false,
			'upload'	: 	false
   		}
   		subWindow = new MyAsycPanelSubWindow(config);
			
    	// サブウィンドウの処理をオーバーライドして表示する（画面固有の処理に書き換える）。
   		subWindow.createScreen = function(obj){

   			var dArr = obj.dArr;
   			/*---------------------------------------*/
			Dom.get('id').value 		= dArr['id'];
			Dom.get('email').value 		= dArr['email'];
			Dom.get('name').value 		= dArr['name'];
			Dom.get('nameyomi').value 	= dArr['nameyomi'];
			Dom.get('password').value 	= dArr['password'];

			// チェックボックスの編集
	    	var num = 0;
			if(dArr['role'] == 'guest'){
		    	var num = 0;
    		}else if(dArr['role'] == 'manager'){
    			var num = 1;
    		}else if(dArr['role'] == 'admin'){
    			var num = 2;
    		}
    		// IEだと書式が違う。
			Dom.get('form1').role[num].checked = true;

   			// 更新（submit）ボタンにハンドラーを設定する。
			var submitObj = new MySubmit();
	    	// Exit Processの定義(evalで評価されて実行される)
   			var exitProc = '';
			var config = {
				submitType	: 'Async',
				submitURL	: 'egpusersUpdateAsync.php',
				submitForm	: 'form1',
				exitProc	: exitProc
			}
			YAHOO.util.Event.on('egp-my-update-button', 'click',
				function(){ 
					submitObj.submit(null,config), null
				}
			);
   			/*---------------------------------------*/
			return;	
		}
		// サブウィンドウの表示
		subWindow.openHdlr();
	}

    /*****************************************************
	* データの取得
	*****************************************************/
    var onClickGetData = function(evt,obj) {
    	Event.preventDefault(evt);
    	
		if(obj.opt == 'detail'){
    		var id 	= obj.id;
    		id = id.replace(/^(egp-my-dt-detail-)/,'')
    		var opt = obj.opt;
		}else if(obj.opt == 'update'){
    		var id 	= obj.id;
    		id = id.replace(/^(egp-my-dt-update-)/,'')
    		var opt = obj.opt;
		}else{
    		var id 	= obj.id;
    		id = id.replace(/^(egp-my-dt-delete-)/,'')
    		var opt = obj.opt;
		}
		
    	var url ="egpusersDetailAsync.php";

    	// リクエストパラメータの設定
		var parm = 'id='+id;
		var arg = {'id':id, 'opt':opt};
		ajaxCallback.argument=arg;
		
		// データの取得
		Connect.asyncRequest('POST',url,
							ajaxCallback, parm);

		return;	
	}
	/******************************************************
	 * Ajaxハンドラー
	 *****************************************************/
	var ajaxHandlers =　{
		
		// 受信成功時の処理
		responseSuccess: function(oj){
			var ret = oj.responseText;
			/*
			 * id,Email,名前,よみ,役割
			 * の形式で落ちてくる。
			 */
			var retData = ret.split(",");
			var rowData = Array();
			rowData['id'] 		= retData[0];
			rowData['email'] 	= retData[1];
			rowData['password'] = retData[2];
			rowData['name'] 	= retData[3];
			rowData['nameyomi'] = retData[4];
			rowData['role'] 	= retData[5];

//			alert(oj.argument.opt);
			if(oj.argument.opt == 'detail'){
				createDetailSubWindow(rowData);
			}else if(oj.argument.opt == 'delete'){
				createDeleteSubWindow(rowData);
			}else{
				createUpdateSubWindow(rowData);
			}
			
		},

		// 受信失敗時の処理
		responseFailure: function(oj){
			var resId = 'egp-my-xhrerror';
			var ret = 'ステータス: ' + oj.status + 'ステータステキスト: ' +
							oj.statusText + '読み込みに失敗しました。';
			Dom.get(resId).innerHTML = ret;
		}
	};

	/******************************************************
	 * コールバック成功/失敗時の振り分け
	 *****************************************************/
	var ajaxCallback = {
		success: ajaxHandlers.responseSuccess,
		failure: ajaxHandlers.responseFailure,
		scope: ajaxHandlers,
		cache: false,
		argument: null
	};

	/*****************************************************
	* クラス名の取得
	*****************************************************/
	var getClassName = function(_obj){
		if(document.all){
			//for IE
			var _keys = _obj.getAttribute('className');
		}else{
			// for FF, Chrome, Safari
			var _keys = _obj.getAttribute('class');
		}
		return _keys;
	};
	
	/*****************************************************
	* 初期処理
	*****************************************************/
   	this.init = function() {
   		/*
		* input type=text, passwordに対するバリデーション（onFocus, onBlur）
		* ハンドラーの設定
		*/
		var inObj = document.getElementsByTagName('a');
		for(var i = 0; i < inObj.length; i++){
			// validation対象となるinput(type=text,password)に、focusとblurにイベントを仕掛ける。
			var aClsName = getClassName(inObj[i]);

			if(aClsName=='egp-my-dt-detail'){
				Event.on(inObj[i].id, 'click', onClickGetData, 
					{'id'	:inObj[i].id,
					'opt'	:'detail'}
				);
			}

			if(aClsName=='egp-my-dt-update'){
				Event.on(inObj[i].id, 'click', onClickGetData, 
					{'id'	:inObj[i].id,
					'opt'	:'update'}
				);
			}
			
			if(aClsName=='egp-my-dt-delete'){
				Event.on(inObj[i].id, 'click', onClickGetData, 
					{'id'	:inObj[i].id,
					'opt'	:'delete'}
				);
			}
		}
   		return;
    }
	return this;
}
